package common

import (
	"encoding/json"
	"github.com/go-xorm/xorm"
	"github.com/gogf/gf/net/ghttp"
	"text/library/in"
)

//记得初始化
//@data,数据结构一定要传入指针
func ApiList(r *ghttp.Request, data interface{}) {
	in.CheckErr(json.Unmarshal([]byte("[]"), data))
	List(r, data)
}

//记得初始化
//@data,数据结构一定要传入指针
func List(r *ghttp.Request, data interface{}, fn ...func(*xorm.Session)) {
	//session := tool.NewSession(r, app.DB)
	checkDb()
	index, size := in.GetPageSize(r)
	session := db.Limit(size, index*size)
	if len(fn) != 0 && fn[0] != nil {
		fn[0](session)
	}
	co, err := session.FindAndCount(data)
	in.CheckErr(err)
	in.Json200(r, data, co)
}

//--------------------------------------------------------------

//记得初始化,前端传入id
//@data,数据结构一定要传入指针
func Info(r *ghttp.Request, data interface{}, param ...string) {
	checkDb()
	s := "id"
	if len(param) > 0 {
		s = param[0]
	}
	id := r.GetQueryString(s)
	has, err := db.ID(id).Get(data)
	in.CheckErr(err)
	if !has {
		in.Err(notFind)
	}
	in.Json200(r, data)
}

//-------------------------------------------------------------

//记得初始化
//@data,数据结构一定要传入指针
func Create(r *ghttp.Request, req ICreate, u IUser) {
	checkDb()
	in.Read(r, req)
	data, s1 := req.New(u)
	s2 := data.Create(u)
	if req.GetID() == 0 {
		_, err := db.Insert(data)
		in.Err(err)
	}
	_, err := db.ID(req.GetID()).Cols(s1, s2).Update(data)
	in.Err(err)
}

//------------------------------------------------------------

//记得初始化
//@data,数据结构一定要传入指针
func Delete(r *ghttp.Request, data interface{}, param ...string) {
	checkDb()
	s := "ids"
	if len(param) > 0 {
		s = param[0]
	}
	ids := r.GetQueryStrings(s)
	_, err := db.In("ID", ids).Delete(data)
	in.Err(err)
}

//===============================================================

func checkDb() {
	if db == nil {
		in.Err("模块未初始化")
	}
}
